package br.com.traffic.help.controle;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FlowEvent;
import org.primefaces.model.DualListModel;

import br.com.traffic.help.dao.GenericDAO;
import br.com.traffic.help.model.Contexto;
import br.com.traffic.help.model.Unidade;

@ManagedBean
@SessionScoped
public class ContextoMB {
	
	private Contexto contexto;
	private List<Unidade> unidades;
	private List<Contexto> contextos;
	private Boolean cadContexto = false;
	private DualListModel<Unidade> dependencias;
	
	
	public ContextoMB(){
		this.contexto = new Contexto();
		this.contextos = (List<Contexto>) new GenericDAO().listarTodos(Contexto.class);
		this.dependencias = new DualListModel<Unidade>(unidades = (List<Unidade>) new GenericDAO().listarTodos(Unidade.class), contexto.getDependencias());
	}
	
	
	public Boolean getCadContexto() {
		return cadContexto;
	}


	public void setCadContexto(Boolean cadContexto) {
		this.cadContexto = cadContexto;
	}


	public List<Contexto> getContextos() {
		return contextos;
	}


	public void setContextos(List<Contexto> contextos) {
		this.contextos = contextos;
	}


	public DualListModel<Unidade> getDependencias() {
		montarDependencias();
		return dependencias;
	}


	public void setDependencias(DualListModel<Unidade> dependencias) {
		this.dependencias = dependencias;
	}


	public Contexto getContexto() {
		return contexto;
	}
	public void setContexto(Contexto contexto) {
		this.contexto = contexto;
	}
	public List<Unidade> getUnidades() {
		carregarUnidades();
		return unidades;
	}
	public void setUnidades(List<Unidade> unidades) {
		this.unidades = unidades;
	}
	
	public String salvar(){
		contexto.setDependencias(dependencias.getTarget());
		new GenericDAO().salvar(contexto);
		
		FacesMessage message = new FacesMessage("Contexto Salvo", "Contexto Salvo com sucesso!");  
		  
        FacesContext.getCurrentInstance().addMessage(null, message);
        
        this.contexto = new Contexto();
        
        this.cadContexto = false;
        this.contextos = (List<Contexto>) new GenericDAO().listarTodos(Contexto.class);
        
        return "ListarContexto";
	}
	
	private void carregarUnidades(){
		this.unidades = (List<Unidade>) new GenericDAO().listarTodos(Unidade.class);
	}
	
	private void montarDependencias(){
		this.dependencias = new DualListModel<Unidade>(unidades = (List<Unidade>) new GenericDAO().listarTodos(Unidade.class), contexto.getDependencias());
	}
	
	public void editar(){
		montarDependencias();
		this.cadContexto = true;
	}
	public void novo(){
		this.contexto = new Contexto();
		montarDependencias();
		this.cadContexto = true;
		
	}
	
	 public String onFlowProcess(FlowEvent event) {
	            return event.getNewStep();  	        
	    }
	

}
